<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // let a=1;
      // if(!a){
      //     let a=2;
      // }

      //   if (!a) {
      //     var a = 2;
      //   }
      //   console.log(a);

      // var a=1;
      // {
      //     a=3;
      //     function a(){

      //     }
      //     a=4;
      //     function a(){

      //     }
      //     a=5;
      //     console.log(a)
      // }
      // console.log(a)

      // Promise.resolve().then(()=>{
      //     console.log("微任务")
      // })
      // console.log("1")
      // new Promise((resolve,reject)=>{
      //     console.log("同步")
      //     resolve();
      // }).then(()=>{
      //     console.log("微任务")
      // })
      // console.log("2")

      // 微任务
      // Promise中resolve执行后then中函数中和catch中函数中
      // async函数中await后是微任务
      // nextTick vue中和nodejs 微任务

      // 宏任务
      // setTimeout()
      // setInterval()
      // setImmediate(()=>{  })  闲时任务

      // 先把微任务放在当前任务列的最下面，把宏任务开辟一个新的任务队列放在新任务队列的最上面

    //   setTimeout(() => {
    //     Promise.resolve().then(() => {
    //       console.log("a");
    //     });
    //   });

    //   Promise.resolve().then(() => {
    //     setTimeout(() => {
    //       console.log("b");
    //     });
    //   });


    // Promise.resolve().then(()=>{
    //     console.log("a1")
    // }).then(()=>{
    //     console.log("b1")
    // }).then(()=>{
    //     console.log("c1")
    // }).then(()=>{
    //     console.log("d1")
    // }).then(()=>{
    //     console.log("e1")
    // })

    // Promise.resolve().then(()=>{
    //     console.log("a2")
    //     return Promise.resolve()
    // }).then(()=>{
    //     console.log("b2")
    //     return Promise.resolve()
    // }).then(()=>{
    //     console.log("c2")
    //     return Promise.resolve()
    // }).then(()=>{
    //     console.log("d2")
    //     return Promise.resolve()
    // }).then(()=>{
    //     console.log("e2")
    // })

    // Promise.resolve(Promise.resolve(1)).then((n)=>{
    //     console.log(n)
    // })
    // new Promise((resolve,reject)=>{
    //     resolve(new Promise((resolve1,reject1)=>{
    //         resolve1(1);
    //     }))
    // }).then((n)=>{
    //     console.log(n)
    // })


    // let o={a:1};
    // // let s=new Set()
    // let s=new WeakSet()
    // s.add(o);
    // o=null;
    // console.log(s)


    // 生成器函数，yield 阻塞函数运行
//     function *fn(a,b){
//         a++;
//         yield a;
//         b++;
//         yield b;
//         let s=a+b;
//         yield s;
//         return s;
//     }

//    var g=fn(3,5);
// //    console.log(g)
//     console.log(g.next())
//     console.log(g.next())
//     console.log(g.next())
//     console.log(g.next())

        // function *fn(){
        //     let a=yield;
        //     console.log(a)
        //     a++;
        //     let b=yield;
        //     console.log(b)
        //     b++;
        //     let s=a+b;
        //     return s;
        // }

        // let g=fn();
        // g.next()
        // g.next(10);
        // g.next(20);
        // console.log(g.next())

        // function *loadImage(){
        //     for(var i=0;i<10;i++){
        //         var img=new Image();
        //         img.src="./img/"+i+".jpg";
        //       yield img.onload=function(){
        //             g.next()
        //         }
        //     }
        // }

        // let g=loadImage();
        // g.next()
    </script>
  </body>
</html>
